/**
 * 应用主入口文件
 * Application Main Entry File
 */

class App {
  constructor() {
    this.currentPage = 'login';
    this.init();
  }

  /**
   * 初始化应用
   */
  async init() {
    try {
      // 显示加载指示器
      this.showLoading();

      // 检查认证状态
      await this.checkAuthStatus();

      // 初始化页面路由
      this.initRouter();

      // 绑定全局事件
      this.bindGlobalEvents();

    } catch (error) {
      console.error('应用初始化失败:', error);
      notification.error('应用初始化失败 / Application initialization failed');
    } finally {
      // 隐藏加载指示器
      this.hideLoading();
    }
  }

  /**
   * 检查认证状态
   */
  async checkAuthStatus() {
    if (auth.token) {
      try {
        // 验证token是否有效
        await auth.verifyToken();

        if (auth.isAuthenticated()) {
          this.currentPage = 'dashboard';
          auth.redirectToDashboard();
        } else {
          this.currentPage = 'login';
          auth.redirectToLogin();
        }
      } catch (error) {
        console.warn('Token验证失败，跳转到登录页');
        this.currentPage = 'login';
        auth.redirectToLogin();
      }
    } else {
      this.currentPage = 'login';
      auth.redirectToLogin();
    }
  }

  /**
   * 初始化路由
   */
  initRouter() {
    // 监听浏览器前进后退
    window.addEventListener('popstate', (event) => {
      this.handleRouteChange(event.state);
    });

    // 处理初始路由
    this.handleRouteChange();
  }

  /**
   * 处理路由变化
   */
  handleRouteChange(state = null) {
    const path = window.location.pathname;

    // 根据路径决定显示哪个页面
    if (path === '/' || path === '/login') {
      if (auth.isAuthenticated()) {
        this.navigateTo('/dashboard');
      } else {
        this.showPage('login');
      }
    } else if (path === '/dashboard') {
      if (auth.isAuthenticated()) {
        this.showPage('dashboard');
      } else {
        this.navigateTo('/login');
      }
    } else {
      // 未知路径，重定向到首页
      this.navigateTo('/');
    }
  }

  /**
   * 显示指定页面
   */
  showPage(pageName) {
    // 隐藏所有页面
    const pages = ['login-page', 'dashboard-page'];
    pages.forEach(pageId => {
      const page = document.getElementById(pageId);
      if (page) {
        page.classList.add('hidden');
      }
    });

    // 显示目标页面
    const targetPage = document.getElementById(`${pageName}-page`);
    if (targetPage) {
      targetPage.classList.remove('hidden');
      this.currentPage = pageName;

      // 如果是仪表盘页面，初始化仪表盘组件
      if (pageName === 'dashboard' && !this.dashboard) {
        this.dashboard = new Dashboard();
      }
    }
  }

  /**
   * 导航到指定路径
   */
  navigateTo(path) {
    window.history.pushState(null, '', path);
    this.handleRouteChange();
  }

  /**
   * 绑定全局事件
   */
  bindGlobalEvents() {
    // 全局错误处理
    window.addEventListener('error', (event) => {
      console.error('全局错误:', event.error);
      notification.error('发生未知错误 / An unknown error occurred');
    });

    // 全局未处理的Promise拒绝
    window.addEventListener('unhandledrejection', (event) => {
      console.error('未处理的Promise拒绝:', event.reason);
      notification.error('请求处理失败 / Request processing failed');
    });

    // 网络状态变化
    window.addEventListener('online', () => {
      notification.success('网络连接已恢复 / Network connection restored');
    });

    window.addEventListener('offline', () => {
      notification.warning('网络连接已断开 / Network connection lost');
    });

    // 键盘快捷键
    document.addEventListener('keydown', (event) => {
      this.handleKeyboardShortcuts(event);
    });
  }

  /**
   * 处理键盘快捷键
   */
  handleKeyboardShortcuts(event) {
    // Ctrl/Cmd + K: 全局搜索
    if ((event.ctrlKey || event.metaKey) && event.key === 'k') {
      event.preventDefault();
      // TODO: 打开全局搜索
      console.log('全局搜索快捷键');
    }

    // Esc: 关闭模态框或通知
    if (event.key === 'Escape') {
      notification.hide();
      // TODO: 关闭其他模态框
    }
  }

  /**
   * 显示加载指示器
   */
  showLoading() {
    const loading = document.getElementById('loading');
    if (loading) {
      loading.classList.remove('hidden');
    }
  }

  /**
   * 隐藏加载指示器
   */
  hideLoading() {
    const loading = document.getElementById('loading');
    if (loading) {
      loading.classList.add('hidden');
    }
  }

  /**
   * 获取当前页面
   */
  getCurrentPage() {
    return this.currentPage;
  }

  /**
   * 刷新当前页面数据
   */
  async refresh() {
    try {
      this.showLoading();

      // 根据当前页面刷新相应数据
      switch (this.currentPage) {
        case 'dashboard':
          // TODO: 刷新仪表盘数据
          break;
        case 'notes':
          // TODO: 刷新笔记列表
          break;
        case 'files':
          // TODO: 刷新文件列表
          break;
      }

      notification.success('数据已刷新 / Data refreshed');
    } catch (error) {
      console.error('刷新失败:', error);
      notification.error('刷新失败 / Refresh failed');
    } finally {
      this.hideLoading();
    }
  }
}

// 页面加载完成后初始化应用
document.addEventListener('DOMContentLoaded', () => {
  window.app = new App();
});

// 导出App类供其他模块使用
window.App = App;